import axios from 'axios'

/**
 * 构造
 */
function VcHttp() {
  this._ = axios.create({
    baseURL: '/api/',
    timeout: 15000,
  })
}

/**
 * 直接使用原始axios
 */
VcHttp.prototype.axios = function () {
  return this._
}

/**
 * 设置登录校验Token以及登录超时处理回调
 * 
 * @param token                 登录Token
 * @param invalidLoginCallback  登录失效回调函数
 */
VcHttp.prototype.token = function (token, invalidLoginCallback) {
  // 请求拦截器
  axios.interceptors.request.use(function (config) {
    config.headers.common = config.headers.common || {}
    config.headers.common['vuetify_console_token'] = token
      // 开启loading
      .$util.showLoading()
    return config
  }, function () {
    return Promise.resolve({ retCode: 0, retMsg: 'server.requestfail' })
  })
  // 返回拦截器
  this._.interceptors.response.use(function (response) {
    let data = response.data
    if (data && data.retCode === -1) {
      invalidLoginCallback()
      return Promise.reject()
    }
    return Promise.resolve(data || { retCode: 0 })
  }, function () { return Promise.resolve({ retCode: 0, retMsg: '$server.responsefail' }) })
}

/**
 * 发送Post请求，以Json体提交
 */
VcHttp.prototype.post = function (url, params) {
  return this._.request({
    method: 'post',
    url: url,
    data: params
  })
}

VcHttp.install = function (Vue) {
  Vue.prototype.$vchttp = Vue.prototype.$vchttp || new VcHttp()
}

export default VcHttp